import { getSetting, chooseAddress, openSetting, showModal ,showToast} from "../../utils/asyncWx.js";

// pages/cart/index.js
Page({

  /**
   * 页面的初始数据
   */
  data: {
    address:{},
    cart:[],
    allChecked:false,
    totalPrice:0,
    totalNum:0
  },

  // 收货地址按钮(bug:点击后若取消无法再获取地址)
  // wx.getSetting() 的scope查看当前用户1.点击：true，2.点击后取消：false, 3.未点击：undf
  async handleChooseAddress(){
      // wx.getSetting({
      //   success: (result)=>{
      //     console.log(result);
      //       const scopeAddress = result.authSetting["scope.address"];
      //       if(scopeAddress===true||scopeAddress===undefined){
      //         wx.chooseAddress({
      //           success: (result)=>{
                  
      //           }
      //         });
      //       }else{
      //         // 用户拒绝过授予权限 先引导用户打开授权页面
      //         wx.openSetting({
      //           success: (result)=>{
      //             wx.chooseAddress({
      //               success: (result2)=>{                     
      //               }
      //             });
      //           }
      //         });
      //       };
      //   }
      // })
      //改造成async
      try {
          const res1 = await getSetting();
          const scopeAddress = res1.authSetting["scope.address"];
          if(scopeAddress === false){
            await openSetting();
          }
          const address = await chooseAddress();
          address.all = address.provinceName + address.cityName + address.countyName + address.detailInfo;
          
          // 将地址存入缓存中
          wx.setStorageSync("address", address);
      } catch (error) {
        console.log(error);
      }
  },

  

  // 设置购物车状态时 重新计算底部价格栏数据 全选/总价格/数量 填充到data和缓存中
  setCart(cart){

    // 方法二 vvv  减少使用循环次数
    let allChecked = true;
    let totalPrice = 0;
    let totalNum = 0;

    cart.forEach(v => {
      if(v.checked){
        totalPrice += v.num * v.goods_price;
        totalNum += v.num;
      }else{
        allChecked = false;
      }
    });
          // 判断数组是否为空 
    allChecked = cart.length != 0 ? allChecked : false;

    this.setData({
      cart,
      allChecked,
      totalPrice,
      totalNum
    })
    wx.setStorageSync("cart", cart);
  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {
    const address = wx.getStorageSync("address");
    const cart = wx.getStorageSync("cart")||[];
    // // 计算全选
    // // every 数组方法遍历 接受一个回调函数 每一个都返回true 则every函数返回true
    // // every方法 在空数组的情况下也会返回true  方法一 vvv
    // // const allChecked = cart.length?cart.every(v=>v.checked):false;

    // // 方法二 vvv  减少使用循环次数
    // let allChecked = true;
    // let totalPrice = 0;
    // let totalNum = 0;

    // cart.forEach(v => {
    //   if(v.checked){
    //     totalPrice += v.num * v.goods_price;
    //     totalNum += v.num;
    //   }else{
    //     allChecked = false;
    //   }
    //   // 判断数组是否为空 
    //   allChecked = cart.length!=0?allChecked:false;


    // });
    // this.setData({
    //   address,
    //   cart,
    //   allChecked,
    //   totalPrice,
    //   totalNum
    // })
    this.setData({
      address
    })
    this.setCart(cart);
  },
  // 商品复选框
  handleItemChange(e){
    const goods_id = e.currentTarget.dataset.id;
    let {cart} = this.data;
    let index = cart.findIndex(v=>v.goods_id === goods_id);
    cart[index].checked = !cart[index].checked;
    this.setCart(cart);
  },

  // 商品数量操作
  async handleItemNumEdit(e){
    let { operation , id } = e.currentTarget.dataset;

    let { cart } = this.data;
    const index = cart.findIndex(v=>v.goods_id === id);
    // 判断是否要执行删除 
    if(cart[index].num === 1 && operation  === -1){
      const res = await showModal({content:"是否删除该商品？"})
      if(res.confirm){
        cart.splice(index, 1);
      }
    }else{
      cart[index].num+=operation;
    }
    
    this.setCart(cart);

  },

  // 全选框
  handleItemAllCheck(){
    let {cart , allChecked} = this.data;
    allChecked = !allChecked;
    cart.forEach(v=>v.checked = allChecked);
    this.setCart(cart);
  },

  // 结算 按键功能
  async handlePay(){
    const { address, totalNum } = this.data;
    if(!address.userName){
      await showToast({title:"还没选择收货地址"});
      return;
    }
    if(totalNum === 0){
      await showToast({title:"还没选择商品"});
      return;
    }

    wx.navigateTo({
      url: '/pages/pay/index'
    });
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {

  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {

  }
})